package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	var wg sync.WaitGroup

	wg.Add(1) //内部计数器=1
	go func() {
		defer wg.Done() //结束goroutine时，内部计数器-1
		fmt.Println("1 goroutine 开始...")
		time.Sleep(2 * time.Second)
		fmt.Println("1 goroutine 结束...")
	}()

	wg.Add(1) //内部计数器=2
	go func() {
		defer wg.Done() //结束goroutine时，内部计数器-1
		fmt.Println("2 goroutine 开始...")
		time.Sleep(4 * time.Second)
		fmt.Println("2 goroutine 结束...")
	}()
	fmt.Println("等待所有goroutine完成")
	wg.Wait() //wait方法会阻塞，直到WaitGroup内部计数器=0时返回
	fmt.Println("所有goroutine结束")
}
